#include "vetor.hpp"
Vetor::Vetor(void) : x(0.0), y(0.0) , z(0.0) 
{ }

Vetor::Vetor(const double _x, const double _y,const double _z) : x(_x), y(_y), z(_z) 
{ }

Vetor::~Vetor(void) { }

double Vetor::prodEsc(const Vetor& objeto) const {
	return x*objeto.x+ y*objeto.y+ z*objeto.z;
}

Vetor Vetor::prodVet(const Vetor& objeto) const {
	
	return Vetor(y*objeto.z - z*objeto.y, z*objeto.x - x*objeto.z,x*objeto.y - y*objeto.x);
}

Vetor Vetor::multEsc(const double valor) const {
	return Vetor(x*valor,y*valor,z*valor);
}

Vetor Vetor::normaliza(void) const{
	Vetor normalizado(*this);
	double mod = normalizado.prodEsc(normalizado);
	if(mod != 0.0) { 
		normalizado = normalizado.multEsc(1.0/sqrt(mod));
		
	}
	return normalizado;
}

Vetor Vetor::subVet(const Vetor _vetor) const {
	return Vetor(this->x-_vetor.x,
			this->y-_vetor.y,
			this->z-_vetor.z);
}

double Vetor::modulo(void) const {
	return sqrt(this->prodEsc(*this));
}

Vetor Vetor::calcReflex(const Vetor& normal) const {
	return  (normal.multEsc(normal.prodEsc(*this)*2.0)).subVet(*this);

}

void Vetor::set(const double _x,const double _y,const double _z) { 
	x = _x;
	y = _y;
	z = _z;
}
